package com.ruoyi.gbase.task;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.gbase.domain.BackTable;
import com.ruoyi.gbase.service.IBackTableService;
import com.ruoyi.gbase.util.ExecuteShellUtil;
import com.ruoyi.gbase.util.GbaseLoadUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;


/**
 * 自动化定时备份gbase数据库表
 * 
 * @author ruoyi
 */
@Component("backupTask")
public class BackUpTask
{
    private static final Logger log = LoggerFactory.getLogger(BackUpTask.class);

    @Value("${backup.ip}")
    private  String ip;

    @Value("${backup.port}")
    private  int port;

    @Value("${backup.username}")
    private  String username;

    @Value("${backup.pwd}")
    private  String pwd;


    @Autowired
    private GbaseLoadUtil gbaseLoadUtil;

    @Autowired
    private IBackTableService iBackTableService;

    /**
     * 自动任务_自动执行昨日入库命令,如果多个表 用分号隔开
     * 20241028 启用新方式
     */
 /*    public void backTable3(String tablenames)
    {
        gbaseLoadUtil.backupTables(tablenames.replace(";","|").replace("；","|"));
        log.info("自动任务（backTable 备份表）结束");
    }
 */
    /**
     * 自动任务_自动执行昨日入库命令,如果多个表 用分号隔开
     * 20241028停止此方式  重写了
     */
    public void backTable(String tablename)
    {
        log.info("自动任务（backTable 备份表）进入:"+tablename);
        try {
            for (String single: tablename.replace("；",";").split(";")){
                ExecuteShellUtil sshClient = ExecuteShellUtil.getInstance();
                sshClient.init(ip,port, username, pwd);
                log.info("自动任务（backTable 备份表）备份表："+single);
                sshClient.execCmd("/opt/back/96_export.sh "+single);

                log.info("开始插入数据库："+single);
                //备份完毕插入数据库
                //判断一下重复，如果有了，就不用插入了
                BackTable backTable = new BackTable();
                backTable.setTableName(single);
                backTable.setCreateBy("系统自动");
                backTable.setBackupDate(DateUtils.getdateYYYYMMDD());
                int isHas = iBackTableService.selectBackTableList(backTable).size();
                if(isHas>0){
                    log.info(single+" 数据库里面已经存在，就不插入了");
                }else{
                    log.info(single+" 表备份结束");
                    backTable.setCreateTime(DateUtils.getNowDate());
                    backTable.setRemark("/opt/back/data/"+DateUtils.getdateYYYYMMDD()+"/"+single+".txt");
                    iBackTableService.insertBackTable(backTable);
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        log.info("自动任务（backTable 备份表）结束");
    }

    /**
     * 自动任务_自动执行昨日入库命令
     * 20221206 启用，采用java形式还原
     * tablename： im.rp_jxtb_month
     * date：20221205
     */
    public void reBack(String tablename,String date)
    {
        log.info("还原表方法（reBack 还原表）进入，表是:"+tablename+" 日期："+date);
        try {
            gbaseLoadUtil.reBack(tablename,date);
            log.info("还原成功：表是:"+tablename+date+"_auto");
        } catch (Exception e) {
            e.printStackTrace();
        }
        log.info("自动任务（reBack 还原表）结束");
    }



    /**
     * 自动任务_自动执行昨日入库命令
     * 20221206 放弃重写
     */
    public void reBack_bakup(String tablename,String date)
    {
        log.info("还原表方法（reBack 还原表）进入，表是:"+tablename+" 日期："+date);
        try {
                ExecuteShellUtil sshClient = ExecuteShellUtil.getInstance();
                sshClient.init(ip,port, username, pwd);
                log.info("还原表方法（reBack 还原表）表："+tablename);
                // 还原方法 ./97_load.sh im.bc_frjg 20210520 im.bc_frjg20210520
                // 原表名 日期  新表名（自动）
                sshClient.execCmd("/opt/back/97_load.sh "+tablename+" "+date +" "+tablename+date+"_auto");

        } catch (Exception e) {
            e.printStackTrace();
        }
        log.info("自动任务（reBack 还原表）结束");
    }


}
